package com.swak.generate.codegen.dialects;

import java.io.Closeable;
import java.util.List;

import com.swak.generate.codegen.RowSetMapper;
import com.swak.generate.codegen.Table;
import com.swak.utils.StringUtils;

/**
 * 数据库方言
 * 
 * @author lifeng
 */
public interface DatabaseOperater extends Closeable {

	/**
	 * 获得所有的表
	 * 
	 * @param db
	 * @return
	 */
	List<String> getTables();

	/**
	 * 获得指定的表
	 * 
	 * @param db
	 * @param table
	 * @return
	 */
	Table getTable(String table);

	/**
	 * 执行 Sql
	 * 
	 * @param sql
	 */
	void execSql(String sql);

	/**
	 * 执行 Sql
	 * 
	 * @param <T>
	 * @param sql
	 * @param mapper
	 * @return
	 */
	<T> List<T> execSql(String sql, RowSetMapper<T> mapper);

	public static DatabaseOperater newDatabaseOperater(String url, String user, String password) {
		if (StringUtils.startsWith(url, "jdbc:mysql:")) {
			return new MySqlOperater(url, user, password);
		}
		return new H2Operater(url, user, password);
	}
}
